<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

class Kunjungan extends Controller {

    function __construct(){
        parent::Controller();
		$this->current_user = models\Current_user::get_user();

		if(!models\Current_user::get_user()) 
			show_error(array('Halaman ini tidak bisa diakses oleh anda!',anchor('','Kembali ke halaman utama')),403);

		$this->next_prev_calendar_url = base_url().$this->uri->segment(1)."/ajax_calendar/";
	}

    function index($tahun = null, $bulan = null, $hari = null){

		if(!$tahun) $tahun = date('Y');
		if(!$bulan) $bulan = date('m');
		if(!$hari) $hari = date('d');
		$tanggal_obj = new Datetime("$tahun-$bulan-$hari");
		$kunjungan_id = '';

		$title = 'Kunjungan '.$tanggal_obj->format('d M Y');
		$this->headbar->add_header($title);
		
		if(models\Current_user::previlege('Administrator|Agen')){

			//seluruh kunjungan sesuai dengan tanggal
			$array_kunjungan= $this->doctrine->em->createQuery("
				SELECT k 
				FROM models\Kunjungan k 
				WHERE k.tanggal LIKE '$tahun-$bulan-$hari%' 
				")->getResult();

			$this->main_content->add_custom('p','Terdapat '.count($array_kunjungan).' kunjungan hari ini');

			//jika ada kunjungan, maka ditampilkan
			if(count($array_kunjungan) > 0){
				$fields = array('teknisi','customer','checklists','testimonial');
				$this->creator->create_daftar_kunjungan($array_kunjungan,$fields);
			}

			$this->headbar->add_menu('tambah_kunjungan','+ kunjungan','');

			//data untuk kalender
			$cal_data = models\Kunjungan::get_calendar_data($tahun,$bulan);

			// menambah block untuk tambah kunjungan
			$this->creator->create_tambah_kunjungan_block($tanggal_obj);

			$this->main_content->add_script('kunjungan');

		} else if(models\Current_user::previlege('Teknisi')){

			$teknisi_id = $this->current_user->get_id();

			//seluruh kunjungan sesuai dengan tanggal dan teknisi
			$array_kunjungan= $this->doctrine->em->createQuery("
				SELECT k 
				FROM models\Kunjungan k 
				JOIN k.teknisi t
				WHERE k.tanggal LIKE '$tahun-$bulan-$hari%' 
				AND t.id = '$teknisi_id'
				")->getResult();

			$this->main_content->add_custom('p','Terdapat '.count($array_kunjungan).' kunjungan yang harus dilaksanakan hari ini');

			//jika ada kunjungan, maka ditampilkan
			if(count($array_kunjungan) > 0){
				$fields = array('customer','alamat','checklists','testimonial');
				$this->creator->create_daftar_kunjungan($array_kunjungan,$fields);
			}

			$this->headbar->add_menu('tambah_kunjungan','+ kunjungan','');

			//data untuk kalender
			$cal_data = models\Kunjungan::get_calendar_data($tahun,$bulan,'',$this->current_user->get_username());

			// menambah block untuk tambah kunjungan
			$this->creator->create_tambah_kunjungan_block($tanggal_obj,$this->current_user->get_id());

			$this->main_content->add_script('kunjungan');

		} else if(models\Current_user::previlege('Customer|Perusahaan')){

			$customer_id = $this->current_user->get_id();

			//seluruh kunjungan sesuai dengan tanggal dan teknisi
			$array_kunjungan= $this->doctrine->em->createQuery("
				SELECT k 
				FROM models\Kunjungan k 
				JOIN k.customer c
				WHERE k.tanggal LIKE '$tahun-$bulan-$hari%' 
				AND c.id = '$customer_id'
				")->getResult();

			if(count($array_kunjungan) > 0){
				$this->main_content->add_custom('p','Untuk menambah/mengubah testimonial, klik tombol edit');
				$kunjungan = $array_kunjungan[0];
				$kunjungan_id = $kunjungan->get_id();
				$this->creator->create_detail_kunjungan_page($kunjungan);
			} else {
				$this->main_content->add_custom('p','Tidak ada kunjungan pada tanggal ini');
			}

			//data untuk kalender
			$cal_data = models\Kunjungan::get_calendar_data($tahun,$bulan,$this->current_user->get_username());

			$this->main_content->add_script('checklist');

		}

		// inisialisasi kalender
		$day_link = base_url()."kunjungan/index";
		$calendar = $this->creator->create_calendar($tahun,$bulan,$this->next_prev_calendar_url,$cal_data);
		$this->sidebar->add_custom('p','Untuk ganti tanggal, klik tanggal dibawah ini');
		$this->sidebar->add_calendar($calendar);
		$this->main_content->add_script('checklist_calendar');

		$this->load->view('template', array(
			'title' => $title,
			'kunjungan_id' => $kunjungan_id,
			'day_link' => $day_link,
			'hari' => $hari,
			'bulan' => $bulan,
			'tahun' => $tahun,
		));
	}

	function ajax_tambah_kunjungan(){
		if(IS_AJAX){
			$this->load->library('form_validation');
			if($this->form_validation->run('tambah_kunjungan') == TRUE){

				$tanggal = new Datetime($this->input->post('tanggal'));

				$customer = $this->doctrine->em
					->getRepository('models\Customer')
					->findOneBy(array('id' => $this->input->post('customer')));

				$teknisi = $this->doctrine->em
					->getRepository('models\Teknisi')
					->findOneBy(array('id' => $this->input->post('teknisi')));

				$array_kunjungan = $this->doctrine->em
					->createQuery('SELECT k FROM models\Kunjungan k ORDER BY k.flex_id')
					->getResult();

				$last_flex_id = $array_kunjungan[count($array_kunjungan)-1]->get_flex_id();
				$new_id = $last_flex_id + 1;

				$kunjungan = new models\Kunjungan();
				$kunjungan->set_flex_id($new_id);
				$kunjungan->set_customer($customer);
				$kunjungan->set_tanggal($tanggal);
				$kunjungan->set_teknisi($teknisi);

				$this->doctrine->em->persist($kunjungan);
				$this->doctrine->em->flush();

				$returned_data = array(
					'status' => 'sukses',
				);
			} else {
				$returned_data = array(
					'status' => 'gagal',
					'error' => validation_errors(),
				);
			}

			echo json_encode($returned_data);

		} else show_404();
	}

	function ajax_edit_kunjungan($id_kunjungan){
		if(IS_AJAX){

			$this->load->library('form_validation');

			if($this->form_validation->run('kunjungan_update') == TRUE){

				$kunjungan = $this->doctrine->em
					->getRepository('models\Kunjungan')
					->findOneBy(array('id' => $id_kunjungan));

				if(!$kunjungan) {
					$returned_data = array('status' => 'gagal');
					echo json_encode($returned_data);
					return false;
				}

				if($this->input->post('flex_id')){
					$kunjungan->set_flex_id($this->input->post('flex_id'));
				}

				if($this->input->post('teknisi')){
					$teknisi = $this->doctrine->em
						->getRepository('models\Teknisi')
						->findOneBy(array('id' => $this->input->post('teknisi')));
					$kunjungan->set_teknisi($teknisi);
				}

				if($this->input->post('testimonial'))
					$kunjungan->set_testimoni($this->input->post('testimonial'));

				$this->doctrine->em->flush();

				if(models\Current_user::previlege('Administrator|Agen'))
					$block = $this->creator->create_kunjungan_block($kunjungan,true,true,false,true);
				else if(models\Current_user::previlege('Customer|Perusahaan'))
					$block = $this->creator->create_kunjungan_block($kunjungan,true,false,true);

				echo $block;

			} else {
				echo validation_errors();
			}

		} else show_404(); 
	}


	function ajax_calendar($tahun,$bulan){
		if(IS_AJAX){

			if(models\Current_user::previlege('Administrator|Agen'))
				$cal_data = models\Kunjungan::get_calendar_data($tahun,$bulan);
			else if(models\Current_user::previlege('Teknisi'))
				$cal_data = models\Kunjungan::get_calendar_data($tahun,$bulan,'',$this->current_user->get_username());
			else if(models\Current_user::previlege('Customer|Perusahaan'))
				$cal_data = models\Kunjungan::get_calendar_data($tahun,$bulan,$this->current_user->get_username());

			$calendar = $this->creator->create_calendar($tahun,$bulan,$this->next_prev_calendar_url,$cal_data);
			echo $calendar;
		} else show_404();
	}

}
